// 一、引入koa 是第三方模块
// 二、使用koa
// 类 约定俗成 首字母大写
const Koa = require("koa");
let app = new Koa();  // 通过koa构建一个应用
// koa里使用中间件 ，是一个回调函数
// ctx :context  
// next -->转交中间件的权利给下一个中间件
// 1.中间件是函数 2.中间件可以通过next 转交权限 3.中间件支持 async await
// 4.中间件执行顺序 遵循 洋葱模型
/* 
    第一个start
    第二个中间件start
    第三个中间件start
    第三个中间件end
    第二个中间件end
    第一个end
*/
let m1 =  (ctx,next)=>{
    console.log("第一个start")
    ctx.state = 100;
    // console.log(ctx.state);
    next();  // 调用m2
    console.log("第一个end")
}
let m2 = (ctx,next)=>{
    console.log("第二个中间件start");
    ctx.state -= 10;
    // console.log(ctx.state);
    // res.write(); end();
    // ctx.body = "hello world";
    next(); // 调用m3
    console.log("第二个中间件end");
}
let m3 = (ctx,next)=>{
    console.log("第三个中间件start");
    ctx.state -= 10;
    // console.log(ctx.state);
    ctx.body = "最后的数据是"+ctx.state;
    console.log("第三个中间件end");
}



app.use(m1);
app.use(m2);
app.use(m3);

//设置服务器的端口号
app.listen(8989);